package test;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
public class DOM4JParse {
    /**
     * 第一章示例7
     */
    public void showInfo(){
        Document doc=null;
        try {
            //加载DOM列
            SAXReader saxResult= new SAXReader();
            doc =saxResult.read(new File("src/main/java/com.bdqn/dom/brandetwo.xml"));
        } catch (DocumentException e) {
            e.fillInStackTrace();
        }
        //获取XML根节点
        Element root=doc.getRootElement();
        //遍历所有的Brand标签
        for (Iterator itBrand = root.elementIterator(); itBrand.hasNext();){
            Element brandEle=(Element)itBrand.next();
            //输出Brand标签的name属性的属性值
            System.out.println("品牌:"+brandEle.attributeValue("name"));
            //遍历Type标签
            for (Iterator itType = brandEle.elementIterator(); itType.hasNext();){
                Element typeEle=(Element) itType.next();
                //输出标签的name属性
                System.out.println("\t型号:"+typeEle.attributeValue("name"));
            }
        }
    }
    /**
     * 第二章简答
     */
    public void listInfo() {
        Document doc = null;
        try {
            // 加载DOM文档
            SAXReader saxReader = new SAXReader();
            doc = saxReader.read(new File("src/main/java/com.bdqn/dom/xmljd.xml"));
        } catch (DocumentException e) {
            e.printStackTrace();
        }

        if (doc != null) {
            // 获取XML根节点
            Element root = doc.getRootElement();
            // 遍历所有的student标签
            for (Iterator<Element> it = root.elementIterator("student"); it.hasNext(); ) {
                Element studentEle = it.next();
                // 输出成绩
                Element scoreEle = studentEle.element("score");
                if (scoreEle != null) {
                    System.out.println("成绩: " + scoreEle.getText());
                }
            }
        }
    }

    /**
     * 第二章实战3修改
     * @param filePath
     */
    public void modifyXml(String filePath) {
        try {
            // 创建 SAXReader 对象来读取 XML 文件
            SAXReader reader = new SAXReader();
            Document doc = reader.read(new File(filePath));
            // 获取 XML 根节点
            Element root = doc.getRootElement();
            // 遍历所有的 Brand 标签
            for (Iterator<Element> itBrand = root.elementIterator("Brand"); itBrand.hasNext();) {
                Element brandEle = itBrand.next();
                // 找到名为 "三星" 的品牌元素并修改其属性值为 "SAMSUNG"
                if ("三星".equals(brandEle.attributeValue("name"))) {
                    brandEle.attribute("name").setValue("SAMSUNG");
                }
            }
            // 将修改后的 XML 保存到文件
            OutputFormat format = OutputFormat.createPrettyPrint();
            XMLWriter writer = new XMLWriter(new FileWriter(filePath), format);
            writer.write(doc);
            writer.close();
            System.out.println("XML 文件修改成功。");
        } catch (DocumentException | IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 删除
     * @param filePath
     */
    public void deletesz(String filePath) {
        try {
            // 创建 SAXReader 对象来读取 XML 文件
            SAXReader reader = new SAXReader();
            Document doc = reader.read(new File(filePath));
            // 获取 XML 根节点
            Element root = doc.getRootElement();
            // 遍历所有的 Brand 标签
            for (Iterator<Element> itBrand = root.elementIterator("Brand"); itBrand.hasNext();) {
                Element brandEle = itBrand.next();
                String brandName = brandEle.attributeValue("name");
                // 删除名为 "SAMSUNG" 的品牌元素
                if ("SAMSUNG".equals(brandName)) {
                    itBrand.remove();
                }
            }
            // 添加新的品牌 "三星" 和型号 "NoteX" 的节点
            Element newBrand = root.addElement("Brand");
            newBrand.addAttribute("name", "三星");
            Element newType = newBrand.addElement("Type");
            newType.addAttribute("name", "NoteX");
            // 将修改后的 XML 保存到文件
            OutputFormat format = OutputFormat.createPrettyPrint();
            XMLWriter writer = new XMLWriter(new FileWriter(filePath), format);
            writer.write(doc);
            writer.close();
        } catch (DocumentException | IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 查询方法，遍历 XML 文件中的品牌和型号信息
     */
    public void sixsz(String filePath) {
        Document doc = null;
        try {
            // 创建 SAXReader 对象来读取 XML 文件
            SAXReader saxReader = new SAXReader();
            doc = saxReader.read(new File(filePath));
        } catch (DocumentException e) {
            e.printStackTrace();
            return; // 如果发生异常，直接返回
        }
        // 获取 XML 根节点
        Element root = doc.getRootElement();

        // 遍历所有的 Brand 标签
        for (Iterator<Element> itBrand = root.elementIterator("Brand"); itBrand.hasNext();) {
            Element brandEle = itBrand.next();
            // 输出 Brand 标签的 name 属性的属性值
            System.out.println("品牌:" + brandEle.attributeValue("name"));

            // 遍历 Type 标签
            for (Iterator<Element> itType = brandEle.elementIterator("Type"); itType.hasNext();) {
                Element typeEle = itType.next();
                // 输出标签的 name 属性
                System.out.println("\t型号:" + typeEle.attributeValue("name"));
            }
        }
    }

    public static void main(String[] args) {
        DOM4JParse modifier = new DOM4JParse();
        String filePath = "src/main/java/com.bdqn/dom/xmlone.xml";
        // 执行修改操作
        //modifier.modifyXml(filePath);
        // 执行查询操作
        //modifier.sixsz(filePath);
        // 执行删除操作
        modifier.deletesz(filePath);
    }
}


